Use full path name when displaying errors opening files for reads and writes.
authorRobert Lipe <robertlipe@gmail.com>
Sun, 27 Dec 2020 05:15:06 +0000 (23:15 -0600)
committerRobert Lipe <robertlipe@gmail.com>
Sun, 27 Dec 2020 05:15:06 +0000 (23:15 -0600)
This doesn't work for every place where we issue fatal errors, but it gets
the high value formats.

src/core/file.h
util.cc

index c6cd70d17fbd918697936546229195e8624a5989..ba130a04a7dec777484a5e1dac2e33ef563d525d 100644 (file)
 
 #include <QtCore/QFile>
 #include <QtCore/QFileInfo>
+#include <QtCore/QStringBuilder>
 #include <QtCore/QIODevice>
 #include <cstdio>
+#include "src/core/logging.h"
 #include "defs.h"
 
 // Mimic gbfile open services
@@ -51,10 +53,15 @@ public:
     }
 
     if (!status) {
-      fatal("Cannot open '%s' for %s.  Error was '%s'.\n",
-            gpsbabel_testmode()? qPrintable(QFileInfo(*this).fileName()) : qPrintable(QFile::fileName()),
-            (mode & QIODevice::WriteOnly)? "write" : "read",
-            qPrintable(QFile::errorString()));
+      fatal(FatalMsg().noquote() << "Cannot open '" %
+        (gpsbabel_testmode() ?
+          QFileInfo(*this).fileName() :
+          QFileInfo(*this).absoluteFilePath()) %
+        "' for " %
+        (mode & QIODevice::WriteOnly ? "write" : "read") %
+        ".  Error was '" %
+        QFile::errorString()  %
+        "'.");
     }
     return status;
   }
diff --git a/util.cc b/util.cc
index 448f64e3ef9ce2d22b25da668e64b605722884df..1bbc3e4cc60200d3f0826c2573e27ed80b86640f 100644 (file)
--- a/util.cc
+++ b/util.cc
@@ -179,8 +179,12 @@ xfopen(const char* fname, const char* type, const char* errtxt)
   }
   FILE* f = ufopen(QString::fromUtf8(fname), type);
   if (nullptr == f) {
+    // There are some possible vagaries of using Qt for the full pathname
+    // vs. the STD C library used for the actual file I/O. It's worth it
+    // to get a better error message.
+    QFileInfo info(fname);
     fatal("%s cannot open '%s' for %s.  Error was '%s'.\n",
-          errtxt, fname,
+          errtxt, qPrintable(info.absoluteFilePath()),
           am_writing ? "write" : "read",
           strerror(errno));
   }
@@ -1760,8 +1764,8 @@ list_codecs()
       maxlen = codec->name().size();
     }
   }
-  info << "Available Codecs:" << endl;
-  info << qSetFieldWidth(8) << "MIBenum" << qSetFieldWidth(maxlen+1) << "Name" << qSetFieldWidth(0) << "Aliases" << endl;
+  info << "Available Codecs:" << Qt::endl;
+  info << qSetFieldWidth(8) << "MIBenum" << qSetFieldWidth(maxlen+1) << "Name" << qSetFieldWidth(0) << "Aliases" << Qt::endl;
   for (auto mib : mibs) {
     auto codec = QTextCodec::codecForMib(mib);
     info << qSetFieldWidth(8) << mib << qSetFieldWidth(maxlen+1) << codec->name() << qSetFieldWidth(0);
@@ -1775,7 +1779,7 @@ list_codecs()
       }
       info << alias;
     }
-    info << endl;
+    info << Qt::endl;
   }
 }